﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<assert.h>

//模拟实现strcmp函数

//int my_strcmp(const char *p1,const char *p2)
//{
//	assert(p1 != NULL);
//	assert(p2 != NULL);
//	while (*p1 == *p2)
//	{
//		p1++;
//		p2++;
//		if (*p1 == '\0')
//			return 0;
//	}
//	
//	if (*p1 > *p2)
//		return 1;
//	else return -1;
//}
//
//int main()
//{
//	int ret = 0;
//	char* p1 = "abcdefg";
//	char* p2 = "abcdq";
//	ret = my_strcmp(p1, p2);
//	printf("%d\n", ret);
//	return 0;
//}

//strncpy :拷贝num个字符从源字符串拷贝到目标空间,不拷贝\0,要拷贝多少字符就拷贝多少字符,源字符串不够就在目标字符
//串之后追加'\0',直到num个,返回str1目标字符串的地址
//int main()
//{
//	char str1[10] = { 0 };
//	char* str2 = "1234567890";
//	strncpy(str1, str2, 5);
//	printf("%s\n", str1);
//	return 0;
//}


//strncat 字符串拼接,将源字符串的前num个字符追加到目标字符串结尾, 再追加一个'\0',如果源字符串指向的
//字符串长度小于num的时候, 只会将字符串中到'\0'的内容追加到destination指向的字符串末尾,返回目标字符串str1的地址
//int main()
//{
//	char str1[10] = "abcf";
//	char str2[10] = "12345";
//	strncat(str1, str2, 3);
//	printf("%s\n", str1);
//}

//模拟实现strstr函数
//函数返回str2在str1中第一次出现的位置
//字符串中的比较匹配不包含\0,以\0作为结束标志

//char* my_strstr(const char* p1,const char* p2)
//{
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cur = p1;
//	if (p2 == NULL)
//	{
//		return p1;
//	}
//	while (*cur) {
//		s1 = cur;
//		s2 = p2;
//		while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return cur;
//		}
//		cur++;
//	}
//	return NULL;
//}
//
//int main()
//{	
//	char* p1 = "abcdefg";
//	char* p2 = "cde";
//	char *ret = my_strstr(p1, p2);
//	printf("%s\n", ret);
//	return 0;
//}

//strtok 函数的使用,字符串分割
//char* strtok(char* str,const char* sep);
//sep指向了一个字符串,定义了分隔符的集合
//第一个参数指定一个字符串, 它包含了多个或者0个由sep字符串中一个或者多个分隔符分割的标记
//strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针,并且保存这个标记结束的位置
//(注:strtok函数会改变被操作的字符串,所以在使用的时候strtok函数切分的字符串一般都是临时拷贝的内容并且可被修改)
//strtok函数的第一个参数不为NULL,函数将找到str中的第一个标记,返回这个标记,并且保存结束位置
//第一个参数为NULL,函数将在同一字符串中被保存的位置开始查找下一个标记
//如果字符串中不存在更多标记,则返回NULL指针

//int main()
//{
//	char arr[] = "192.168.6.111";
//	char* sep = ".";
//	char* str = NULL;
//	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep)) 
//	{
//		printf("%s\n", str);
//	}
//	return 0;
//}

//strerror函数的使用

//int main()
//{
//	FILE* pFile;
//	pFile = fopen("text,txt", "r");
//	if (pFile == NULL)
//		printf("Error opening file text.txt: %s\n", strerror(errno));
//	return 0;
//}
//
//perror
int main()
{
	FILE* pFile;
	pFile = fopen("text,txt", "r");
	if (pFile == NULL)
		perror("Error opening file text.txt");
	return 0;
}

//#include <stdio.h>
//#include <string.h>
//int main()
//{
//	char str[] = "This is a simple string";
//	char* pch;
//	pch = strstr(str, "simple");
//	strncpy(pch, "sample", 6);
//	printf("%s\n", str);
//	return 0;
//}
//
//#include <errno.h>
//#include <string.h>
//#include <stdio.h>
////我们打印⼀下0~10这些错误码对应的信息 
//int main()
//{
//	int i = 0;
//	for (i = 0; i <= 10; i++) {
//		printf("%s\n", strerror(i));
//	}
//	return 0;
//}